def make_multi_layer_model(num_inner_neurons, num_outers_neurons):
    model = Sequential()
    model.add(Dense(num_outers_neurons,input_dim=image_height*image_width, 
                    activation='relu'))
    model.add(Dense(num_inner_neurons,activation='relu'))
    model.add(Dense(num_outers_neurons,activation='relu'))
    model.add(Dense(image_height*image_width, activation='relu'))
    model.summary()
    return model

def multi_layer_autoencoder(num_inner_neurons, num_outers_neurons):
    model = make_multi_layer_model(num_inner_neurons, num_outers_neurons)

    model.compile(loss='mean_squared_error', optimizer='adam',
                  metrics=['accuracy'])
    model.fit(X_train, X_train, validation_data=(X_test, X_test),
              epochs=20, batch_size=512, verbose=0)
    X = []
    for i in range(12):
        X.append(model.predict(X_test[i,:].
                 reshape(1,image_height*image_width)).
                 reshape(image_height,image_width))
    plot(X)
    
for num_inner_neurons, num_outers_neurons in zip([8,24,40],[16,40,100]):
    multi_layer_autoencoder(num_inner_neurons, num_outers_neurons)
